package code.D1220;

import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Set;

/**
 * author： yeswater
 * create： 2023/12/22
 *
 * 前 k 个高频元素
 *
 */
public class T347 {
    public int[] topKFrequent(int[] nums, int k) {
        int[] result = new int[k];
        HashMap<Integer,Integer> map = new HashMap();
        for(int num : nums){
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        Set<Map.Entry<Integer, Integer>> entries = map.entrySet();
        // 根据map的value值，构建于一个大顶堆（o1 - o2: 小顶堆， o2 - o1 : 大顶堆）
        PriorityQueue<Map.Entry<Integer, Integer>> queue =
                new PriorityQueue<>((o1, o2) -> o2.getValue() - o1.getValue());
        for(Map.Entry<Integer, Integer> entry : entries){
            queue.offer(entry);
            System.out.println(entry.toString());
        }
        for(int i = k-1; i>=0; i--){
            result[i] = queue.poll().getKey();
        }
        return result;
    }
}
